"""
1.	定义一个函数 process_numbers(numbers)，接受一个数字列表作为参数。
2.	在函数内部：
a) 计算列表中的最大值、最小值和平均值
b) 将列表中的偶数筛选出来形成新列表
c) 返回一个包含以上结果的元组 (max_val, min_val, avg_val, even_list)
3.	调用这个函数处理列表 [12, 45, 23, 67, 34, 89, 56] 并打印结果。
示例输出:
最大值: 89, 最小值: 12, 平均值: 46.57, 偶数列表: [12, 34, 56]
"""
def process_numbers(numbers):
    """
    定义函数
    :param numbers: 数字列表
    :return: 返回按要求的numbers
    """
    # 计算内容
    number_max = max(numbers)
    number_min = min(numbers)
    number_avg = sum(numbers) / len(numbers)
    new_list = [num for num in numbers if num % 2 == 0 ]
    return number_max, number_min, number_avg, new_list

# 调用函数
number_list=[12, 45, 23, 67, 34, 89, 56]
n=process_numbers(number_list)
# 输出
print(f'最大值：{n[0]},最小值：{n[1]},平均值：{n[2]:.2f},偶数列表：{n[3]}')

"""
编写一个程序，包含以下功能：
1.	定义一个函数 add_student(records, name, score) 向成绩记录中添加学生。
2.	定义一个函数 get_statistics(records) 计算并返回最高分、最低分、平均分。
3.	定义一个函数 find_students_by_score(records, min_score, max_score) 查找指定分数段的学生。
4.	使用字典来存储学生记录，格式为 {学号: {'name': 姓名, 'score': 分数}}
5.	实现简单的交互界面，让用户可以选择添加学生、查看统计、查找学生或退出。
示例运行:
1. 添加学生 2. 查看统计 3. 查找学生 4. 退出
请选择: 1
请输入学号: 001
请输入姓名: 张三
请输入分数: 85
添加成功!
"""
# 学生成绩管理系统

# 学号计数器，用于自动生成学号
student_id_counter = 1


def add_student(records, name, score):
    """
    向成绩记录中添加学生（自动生成学号）
    :param records: 学生记录字典
    :param name: 姓名
    :param score: 分数
    :return: 添加成功消息和学号
    """
    global student_id_counter
    student_id = f"{student_id_counter:03d}"  # 生成3位学号，如001, 002
    student_id_counter += 1

    records[student_id] = {'name': name, 'score': score}
    return f"添加成功! 学号: {student_id}"


def get_statistics(records):
    """
    计算并返回最高分、最低分、平均分
    :param records: 学生记录字典
    :return: 统计结果字符串
    """
    if not records:
        return "暂无学生记录"

    scores = [student['score'] for student in records.values()]
    max_score = max(scores)
    min_score = min(scores)
    avg_score = sum(scores) / len(scores)

    return f"最高分: {max_score}, 最低分: {min_score}, 平均分: {avg_score:.2f}"


def find_students_by_score(records, min_score, max_score):
    """
    查找指定分数段的学生
    :param records: 学生记录字典
    :param min_score: 最低分数
    :param max_score: 最高分数
    :return: 符合条件的学生列表
    """
    result = []
    for student_id, info in records.items():
        if min_score <= info['score'] <= max_score:
            result.append((student_id, info['name'], info['score']))
    return result


def display_menu():
    """显示主菜单"""
    print("\n" + "=" * 40)
    print("学生成绩管理系统")
    print("1. 添加学生")
    print("2. 查看统计")
    print("3. 查找学生")
    print("4. 退出")
    print("=" * 40)


def main():
    """主函数"""
    records = {}  # 存储学生记录 {学号: {'name': 姓名, 'score': 分数}}

    while True:
        display_menu()
        choice = input("请选择: ")

        if choice == '1':
            # 添加学生功能
            name = input("请输入姓名: ").strip()

            # 验证分数输入
            try:
                score = float(input("请输入分数: "))
                if score < 0 or score > 100:
                    print("分数必须在0-100之间!")
                    continue

                # 添加学生
                result = add_student(records, name, score)
                print(result)

            except ValueError:
                print("分数必须是数字!")

        elif choice == '2':
            # 查看统计功能
            stats = get_statistics(records)
            print(f"\n{stats}")

            # 显示所有学生信息
            if records:
                print("\n所有学生信息:")
                print("学号\t姓名\t分数")
                print("-" * 20)
                for student_id, info in records.items():
                    print(f"{student_id}\t{info['name']}\t{info['score']}")

        elif choice == '3':
            # 查找学生功能
            if not records:
                print("暂无学生记录")
                continue

            try:
                min_score = float(input("请输入最低分数: "))
                max_score = float(input("请输入最高分数: "))

                if min_score > max_score:
                    print("最低分数不能大于最高分数!")
                    continue

                # 查找学生
                students = find_students_by_score(records, min_score, max_score)

                if students:
                    print(f"\n在 {min_score}-{max_score} 分数段的学生:")
                    print("学号\t姓名\t分数")
                    print("-" * 20)
                    for student_id, name, score in students:
                        print(f"{student_id}\t{name}\t{score}")
                else:
                    print("该分数段没有学生")

            except ValueError:
                print("分数必须是数字!")

        elif choice == '4':
            # 退出程序
            print("感谢使用学生成绩管理系统!")
            break

        else:
            print("输入错误，请选择1-4!")


# 运行程序
if __name__ == "__main__":
    main()